% !Mode:: "TeX:UTF-8"

\section{个人贡献}

\subsection{接线图设计与模块连接}
作为小组成员，我首先负责本项目中模块的接线设计与连接，以此保证系统功能的实现。
\begin{itemize}
    \item 基于模块化思想设计合理分配每个模块的占用的I/O口，在原理图上预先搭建STM32系统板和模块的电路功能。
    \item 代码编写完成后，使用面包板将STM32系统板和模块的电路部分实现。
    \item 电路部分搭建完成后，去人每个模块正常运行，如电机师傅正常转动，OLED显示屏工作，温湿度传感器和人体红外传感器有效，蓝牙模块正常收发数据等。
    \item 除此之外还要测试STM32系统板能否正常供电以及检查电路接线部分有无过载。
    \item 接线过程中，我与小组成员不断沟通并确认系统的接线布置，避免后期调试时因接线产生的错误。
\end{itemize}

\subsection{核心代码实现}
\begin{itemize}
    \item 我和小组成员参与编写DHT11温湿度采集、红外检测、OLED显示、矩阵按键、蜂鸣器、蓝牙串口、风扇PWM等基础驱动代码。
    \item 其中我主要负责主程序\verb|main.c|中有关\textbf{温湿度检测与显示}、\textbf{温度阈值设置}、\textbf{蜂鸣器反馈音}、\textbf{蓝牙遥控与串口通信}模块的功能实现，加以模块之间的接线调试，完成STM32系统的功能实现。
    \item 我使用DHT11温湿度传感器实时检测并通过OLED显示屏显示当前的温度和湿度；接入蜂鸣器模块反馈按键操作和蓝牙命令操作，增加调试期间的便利程度；主函数中实现按键设置温度阈值（16~40℃），高于阈值开启风扇并通过所接受的温度自动调速，低于阈值则关闭风扇。
\end{itemize}

\subsection{蓝牙模块数据收发}
\begin{itemize}
    \item 我还参与项目中蓝牙模块收发数据功能的实现。
    \item 蓝牙模块的加入，我可以通过手机APP接收当前温湿度数值，发送“E”蓝牙模块返回当前温湿度；直接发送数值控制风扇电机转速，发送“30”使电机模块转速调整为最大转速的百分之三十；或发送字符控制相对按键实现远程调控，发送“A”到“D”四个字符相当按下系统板所连接的按键。
    \item 并且针对不同工作模式，我和组员一起优化OLED界面内容的显示，提升了系统的交互体验。
    \item 在后期的调试工作中的，通过发送多种数据检测代码的合理性，避免存在未知的错误。
\end{itemize}

\subsection{开发中遇到的问题及解决方案}

\subsubsection{问题描述}
在实现\textbf{手机APP发送转速控制电机速度}功能时，我们需要将蓝牙模块接收的字符串转换成整数，发现原先主函数中将单个字符的字符串转化成单个字符的函数失效，电机转速混乱。

\subsubsection{原因分析}
我们认为是蓝牙中断函数中原将单个字符串转换为字符的函数对多位整数不可用，两者转换方式不匹配导致次这转换乱码。

\subsubsection{解决方案}
我们重新编写蓝牙中断函数中原先转换单个字符串的函数。
\begin{itemize}
    \item 我们知道手机APP发送数据以换行符结尾，因此可以定义一个足够长度的数组作为蓝牙模块接受数据的缓冲区，中断函数中检测到所发送的字符串不是单个字符时，将接受到的数据存入数组后转为整数调用。
    \item 在蓝牙串口接收到手机端发送的特定指令（如整数 \texttt{30}）时，蓝牙中断函数获取到所发送的字符串，该字符串转换为整数后赋给缓冲变量。
    \item 在主函数中，编写函数优先处理蓝牙模块信息，将缓冲变量作为电机转动函数的变量即可通过手机APP发送控制风扇电机转速。
\end{itemize}

\subsubsection{问题描述}
我们在添加蜂鸣器模块后，想每一步对STM32的操作得到反馈声音，主函数中编写每一步蓝牙操作或按键操作后使蜂鸣器模块开启，延时函数延时，蜂鸣器模块关闭。其中加入延时函数后，运行主函数会使程序卡死。

\subsubsection{原因分析}
经过与组员讨论和多轮调试，我们推测问题可能是封装成独立模块的延时函数在主函数调用后在延时模块内无限循环导致在程序卡死。

\subsubsection{解决方案}
我们去除了使用独立封装的延时函数。
\begin{itemize}
    \item 在主函数中，蜂鸣器模块启动后，定义整数变量不断自增，自增到一定数值后退出达成延时效果。
    \item 我们经过不断调试，找到最适合作为蜂鸣器反馈声音的时长即自增数值。
  
    \item 经过上述调整后，我们解决了调试中出现的错误，并且优化了代码，管理了函数中各种变量名，更易于修改。
\end{itemize}




